package com.czm.art_light.annotation;


import com.czm.art_light.constant.CommonConsts;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 缓存注解（包含锁配置）
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CacheWithLock {
    /**
     * 缓存名称（用于区分不同业务）
     */
    String cacheName();

    /**
     * 缓存Key的SpEL表达式 或者分布式锁的表达式 前面加上LOCK::
     * 示例："#id" 表示使用第一个参数作为key
     */
    String key();

    /**
     * 默认正常数据缓存时间（秒）
     */
    long expireTime() default CommonConsts.DEFAULT_CACHE_EXPIRATION_TIME;

    /**
     * 是否缓存空值（防穿透）
     */
    boolean cacheNull() default false;

    /**
     * 默认空值缓存时间（秒）
     */
    long nullExpireTime() default CommonConsts.DEFAULT_EMPTY_CACHE_EXPIRATION_TIME;

    /**
     * 是否使用分布式锁
     */
    boolean enabled() default false;
}